package behavioral.pattern.observer.subject;

import behavioral.pattern.observer.message.Message;
import behavioral.pattern.observer.observers.Observer;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executor;

/**
 * @Autor: yuanyongan
 * @Description: TODO:可以手动实现一个EventBus，参考观察者模式章节
 * @Date 2023/1/9 15:57
 */
public class RealSubject implements Subject{
    List<Observer> observers;

    // 线程池
    private Executor executor;

    public RealSubject(){
        this.observers = new ArrayList<>();
    }
    @Override
    public void registerObserver(Observer observer) {
        this.observers.add(observer);
    }

    @Override
    public void removeObserver(Observer observer) {
        observers.remove(observer);
    }

    /**
     * 这里是通知观察者的部分，其实也就是调用观察者的函数进行执行
     * @param message
     */
    @Override
    public void notifyObservers(Message message) {
        for (Observer observer : observers){
            executor.execute(new Runnable() {
                @Override
                public void run() {
                    observer.update(message);
                }
            });
        }
    }
}
